﻿#pragma once

#include <string>
#include <vector>
#include <stdexcept>
#include <functional>

namespace ShadowMerger
{
    class Function
    {
        // int dimension = 500   -   Image manipulation area, increase for larger images but must be static for while library
    public:
        static Bitmap *combineIMG(const std::string &image, const std::string &shadow, std::vector<int> &imageOffsets, std::vector<int> &shadowOffsets, int dimension = 500);

        // Remove region fat
        static Bitmap *Crop(Bitmap *bmp);

        static bool IsOdd(int value);

        // Mir 2 standard colour 
        static Bitmap *ChangeColor(Bitmap *scrBitmap);

        // Convert Mir 3 shadow to Mir 2 
        static Bitmap *MirStyleTransparent(Bitmap *bmp);

        // Extra pish
        static Bitmap *ChangeColorBitLock(Bitmap *scrBitmap);

        static Bitmap *MirStyleTransparentBitLock(Bitmap *bmp);
        // End Extra pish

        static Bitmap *Mir3StyleShadow(Color *colour, Image *Path);

        // Set image opacity, utter
        /// <summary>  
        /// method for changing the opacity of an image  
        /// </summary>  
        /// <param name="image">image to set opacity on</param>  
        /// <param name="opacity">percentage of opacity</param>  
        /// <returns></returns>  
        static Image *SetImageOpacity(Image *image, float opacity);

    public:
        class Benchmark
        {
        private:
            static DateTime startDate;
            static DateTime endDate;
        public:
            static TimeSpan getSpan();
            static void Start();
            static void End();
            static double GetSeconds();
        };
    };
}
